﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Turnero.Entidades;
using Turnero.DAOs;

namespace Turnero.Profesional
{
    public partial class frmModificarProfesional : Form
    {
        private Turnero.Entidades.Profesional profesional;
        
        private DAO_Profesionales profesionalesDAO = new DAO_Profesionales();

        public frmModificarProfesional()
        {

        }

        public frmModificarProfesional(Turnero.Entidades.Profesional prof)
        {
            InitializeComponent();
            profesional = prof;
            txtMP.Text = profesional.Mat;
            txtApellidos.Text = profesional.Ape;
            txtCelular.Text = profesional.Cel;
            txtCuitCuil.Text = profesional.Cuit;
            txtDomicilio.Text = profesional.Domicilio;
            txtEmail.Text = profesional.Email;
            txtNombres.Text = profesional.Nom;
            txtNroDoc.Text = profesional.Nrodoc;
            txtObservaciones.Text = profesional.Obs;
            txtTelefono.Text = profesional.Tel;
            cbxLocalidad.Text = profesional.Localidad;
            cbxSexo.Text = profesional.Sexo;
            cbxTipoDoc.Text = profesional.Tipodoc;
            dtpFechaNac.Text = profesional.Fechanac;
            //cargarComboEspecialidades();
          
                 
        }

     

        //private void cargarComboEspecialidades()
        //{
        //    cbxEspecialidad.DataSource = profesionalesDAO.dameEspecialidades();
        //    cbxEspecialidad.DisplayMember = "nombre";
        //    cbxEspecialidad.ValueMember = "idespecialidad";
        //}

        private void frmModificarProfesional_Load(object sender, EventArgs e)
        {

        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            
            if (MessageBox.Show("¿Desea actualizar los datos del profesional?", "Confirmacion cambios", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                //Checkeo de campos obligatorios.
                if (validar())
                {
                    if (dtpFechaNac.Value > System.DateTime.Now)
                    {
                        MessageBox.Show("La fecha de nacimiento del profesional no puede ser mayor al dia de hoy!", "Fecha Incorrecta", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    string cod, mat, ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, cuitcuil, obs, especialidad;

                    cod = profesional.Cod.Trim();
                    mat = txtMP.Text.Trim();
                    ape = txtApellidos.Text.ToUpper().Trim();
                    nom = txtNombres.Text.ToUpper().Trim();
                    tipodoc = cbxTipoDoc.SelectedItem.ToString();
                    nrodoc = txtNroDoc.Text.Trim();
                    fechanac = dtpFechaNac.Value.Date.ToString("yyyy-MM-dd");
                    sexo = cbxSexo.SelectedItem.ToString().Trim();
                    dom = txtDomicilio.Text.ToUpper().Trim();
                    loc = cbxLocalidad.SelectedValue.ToString();
                    tel = txtTelefono.Text.Trim();
                    cel = txtCelular.Text.Trim();
                    email = txtEmail.Text.Trim();
                    cuitcuil = txtCuitCuil.Text.Trim();
                    obs = txtObservaciones.Text.Trim();
                    

                    Boolean actualizar = profesionalesDAO.actualizarProfesional(cod, mat, ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, cuitcuil, obs);
                    if (actualizar)
                    {
                        MessageBox.Show("Los datos del profesional se actualizaron exitosamente", "Actualizacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("\nSe produjo un error al actualizar el profesional en el sistema", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("Faltan completar datos obligatorios en el formulario", "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }

        private Boolean validar()
        {
            Boolean ok = false;

            if (!txtMP.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtApellidos.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNombres.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNroDoc.Text.Equals("") && cbxTipoDoc.SelectedIndex > (-1))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtDomicilio.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            String temp = (txtCuitCuil.Text.Replace("-", string.Empty)).Trim();
            if (!temp.Equals(""))
            {
                Boolean cuitResultado;
                cuitResultado = validaCuit(txtCuitCuil.Text);
                if (cuitResultado == false)
                {
                    MessageBox.Show("CUIT no válido");
                    txtCuitCuil.Focus();
                    return false;
                }

            }
            else
            {
                ok = true;
            }

            return ok;
        }


        private bool validaCuit(string cuit)
        {
            if (cuit == null)


                return false;



            //Quito los guiones, el cuit resultante debe tener 11 caracteres.
            cuit = cuit.Replace("-", string.Empty);


            if (cuit.Length != 11)
            {

                return false;
            }

            else
            {

                int calculado = CalcularDigitoCuit(cuit);

                int digito = int.Parse(cuit.Substring(10));

                return calculado == digito;

            }
        }

        private int CalcularDigitoCuit(string cuit)
        {

            int[] mult = new[] { 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 };

            char[] nums = cuit.ToCharArray();

            int total = 0;

            for (int i = 0; i < mult.Length; i++)
            {

                total += int.Parse(nums[i].ToString()) * mult[i];
            }

            var resto = total % 11;

            return resto == 0 ? 0 : resto == 1 ? 9 : 11 - resto;

        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtMP.Text = "";
            txtApellidos.Text = "";
            txtNombres.Text = "";
            txtNroDoc.Text = "";
            txtDomicilio.Text = "";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtCuitCuil.Text = "";
            txtObservaciones.Text = "";

            cbxLocalidad.Text = "Alta Gracia";
            cbxSexo.SelectedIndex = 0;
            cbxTipoDoc.SelectedIndex = 0;
            txtMP.Focus();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}
